package com.sparrow.rpc.socket.codec;

import io.netty.handler.codec.LengthFieldBasedFrameDecoder;

/**
 * rpc黏包拆包decoder
 * 字节数组< lengthFieldOffset + lengthFieldLength 不会进行解码
 */
public class RpcLengthFieldBasedFrameDecoder extends LengthFieldBasedFrameDecoder {
    // 消息类型所占字节数
    private static final int TYPE_LENGTH = 1;
    // 长度字段所占字节数
    private static final int LENGTH_FIELD_LENGTH = 4;

    public RpcLengthFieldBasedFrameDecoder(int maxFrameLength) {
        // 调用父类构造函数
        // maxFrameLength: 最大帧长度，防止恶意攻击
        // lengthFieldOffset: 长度字段的偏移量，即消息类型的长度
        // lengthFieldLength: 长度字段的长度
        // lengthAdjustment: 长度调整值，由于长度字段表示的是序列化数据的长度，需要加上消息类型和长度字段本身的长度
        // initialBytesToStrip: 初始跳过的字节数，这里跳过消息类型和长度字段
        super(maxFrameLength, TYPE_LENGTH, LENGTH_FIELD_LENGTH, 0, 0);
    }

}
